<?php
/**
 * Created by JetBrains PhpStorm.
 * User: Mr.UBKey
 * Date: 27/10/2011
 * Time: 17:14
 * To change this template use File | Settings | File Templates.
 */
class Product_PCControlPanelController extends XPHP_Controller
{
    public function _init()
    {
        $this->loadLayout('ControlPanel/XAdmin');
    }

    #[Authorize(roles = 'Administrator')]
    public function indexAction()
    {
        //Lấy ra danh sách các menu
        $model = new Areas_Product_Models_Category();
        $categories = $model->getCategoryMultiLevel(0);
        $this->view->htmlCategoryMultiLevel = $this->_createHtmlCategoryMultiLevel($categories);
        return $this->view();
    }

    #[Authorize(roles = 'Administrator')]
    public function indexPost()
    {
        //Lưu sort của category
        $order = array();
        //List order category
        $list = $this->params['list'];
        foreach ($list as $id => $parent_id) {
            $model = new Areas_Product_Models_Category($id);
            if (!isset($order[$parent_id])) {
                //Thứ tự
                $sort = $order[$parent_id] = 1;
            } else {
                //Tăng order lên 1
                $order[$parent_id] = $order[$parent_id] + 1;
                //Thứ tự
                $sort = $order[$parent_id];
            }
            $model->sort = $sort;
            //Nếu parent_id == root chuyển thành 0
            if ($parent_id == "root")
                $model->parent_id = 0;
            else
                $model->parent_id = $parent_id;
            //Cập nhật
            $model->update();
        }
        return $this->json(
            array('success' => true, 'message' => 'Cập nhật thứ tự danh mục thành công'));
    }

    #[Authorize(roles = 'Administrator')]
    public function createAction()
    {
        //Lấy ra danh sách cây các danh mục
        $catModel = new Areas_Product_Models_Category();
        $categories = $catModel->getCategoryTree(0);
        $categoryOptions = array("0" => "Danh mục gốc");
        foreach($categories as $cat)
        {
            $categoryOptions[$cat->id] = $cat->name;
        }
        $this->view->categoryOptions = $categoryOptions;
        $model = new Areas_Product_Models_Category();
        return $this->view($model);
    }

    #[Authorize(roles = 'Administrator')]
    public function createPost(Areas_Product_Models_Category $mode)
    {
        if($this->model->validate())
        {
        	$this->model->lang_id = $_SESSION['lang_id'];
            if($this->model->insert())
            {
                return $this->json(array("success" => true, "message" => "Thêm danh mục vào hệ thống thành công"));
            }
            else
                return $this->json(array("success" => false, "message" => "Xảy ra lỗi khi thêm danh mục vào hệ thống"));
        }
        else
            return $this->json(array("success" => false, "message" => "Thông tin nhập vào chưa chính xác"));
    }

    #[Authorize(roles = 'Administrator')]
    public function editAction()
    {
        //Lấy ra id
        $id = $this->params[0];
        $model = new Areas_Product_Models_Category($id);
        
        //Lấy ra danh sách cây các danh mục
        $catModel = new Areas_Product_Models_Category();
        $categories = $catModel->getCategoryTree(0);
        $categoryOptions = array("0" => "Danh mục gốc");
        foreach($categories as $cat)
        {
            $categoryOptions[$cat->id] = $cat->name;
        }
        $this->view->categoryOptions = $categoryOptions;
        
        return $this->view($model);
    }

    #[Authorize(roles = 'Administrator')]
    public function editPost(Areas_Product_Models_Category $model)
    {
        if($this->model->validate())
        {
            if($this->model->update())
            {
                return $this->json(array("success" => true, "message" => "Cập nhật danh mục thành công"));
            }
            else
                return $this->json(array("success" => false, "message" => "Xảy ra lỗi khi cập nhật danh mục vào hệ thống"));
        }
        else
            return $this->json(array("success" => false, "message" => "Thông tin nhập vào chưa chính xác"));
    }

    #[Authorize(roles = 'Administrator')]
    public function deletePost(Areas_Product_Models_Category $model)
    {
        $this->model->delete();
        return $this->json(array("success" => true, "message" => "Xóa danh mục sản phẩm thành công"));
    }

    /**
     * Lấy ra html hiển thị menu đa cấp
     * @param array $menu Menu Multilevel
     */
    private function _createHtmlCategoryMultiLevel($categories)
    {
        $html = "<ol class='sortable'>";
        foreach ($categories as $catItem) {
            $editUrl = $this->url->action("edit", array($catItem->id));
            $deleteUrl = $this->url->action("delete");
            $html .= "<li id='list_{$catItem->id}'>
            			<div class='title'><span>{$catItem->name}</span>
            				<div class='options'>
            					<a href='{$editUrl}' class='button ico-btn ico-text-edit tool-tip' title='{$catItem->name}' rel='edit'>
            					</a>
            					<a href='{$deleteUrl}' class='button ico-btn ico-text-trash tool-tip' item='{$catItem->name}' title='{$catItem->name}'
            					data='{$catItem->id}' rel='delete'>
            					</a>
                            </div>
            			</div>";
            if (!empty($catItem->subs)) {
                $html .= $this->_recursiveCategoryMultiLevel($catItem->subs);
            }
        }
        $html .= "</ol>";
        return $html;
    }

    /**
     * Hàm đệ quy lấy ra danh mục đa cấp
     * @param array $categories Menu Multilevel
     */
    private function _recursiveCategoryMultiLevel($categories)
    {
        $html = "<ol>";
        foreach ($categories as $catItem) {
            $editUrl = $this->url->action("edit", array($catItem->id));
            $deleteUrl = $this->url->action("delete");
            $html .= "<li id='list_{$catItem->id}'>
            			<div class='title'><span>{$catItem->name}</span>
            				<div class='options'>
            					<a href='{$editUrl}' class='button ico-btn ico-text-edit tool-tip' title='{$catItem->name}' rel='edit'>
            					</a>
            					<a href='{$deleteUrl}' class='button ico-btn ico-text-trash tool-tip' item='{$catItem->name}' title='{$catItem->name}'
            					data='{$catItem->id}' rel='delete'>
            					</a>
                            </div>
            			</div>";
            if (!empty($catItem->subs)) {
                $html .= $this->_recursiveMenuMultiLevel($catItem->subs);
            }
        }
        $html .= "</ol>";
        return $html;
    }
}
 
